﻿using System;
using System.Collections.Generic;
using Sinacor.Infra.Service.Security.Services;

namespace Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation
{
    /// <summary>
    /// ServiceImplementation Class - EventoContabil
    /// </summary>
    [SinacorServiceBehavior]
    public class EventoContabil : ServiceContract.IEventoContabil
    {
        #region Membros da interface IEventoContabil

        /// <summary>
        /// Serviço irá alterar o EventoContabil informado como parâmetro.
        /// </summary>
        /// <param name="request">DataContract.Request.EventoContabilRequest</param>
        public void AlterarEventoContabil(Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.EventoContabilRequest request)
        {            
            new BusinessLogic.EventoContabil().AlterarEventoContabil(new Translator.DataContractToBusinessEntity.EventoContabil().ToEventoContabil(request));
        }

        /// <summary>
        /// Serviço irá alterar uma coleção de EventosContabeis informados como parâmetro.
        /// </summary>
        /// <param name="requestList">Lista de objetos DataContract.Request.EventoContabilRequest</param>
        public void AlterarEventosContabeis(List<Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.EventoContabilRequest> requestList)
        {
            new BusinessLogic.EventoContabil().AlterarEventosContabeis(new Translator.DataContractToBusinessEntity.EventoContabil().ToEventoContabil(requestList));
        }

        /// <summary>
        /// Serviço irá Consultar uma lista de EventosContabeis, utilizando o parâmetro informado.
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroEventoContabilRequest</param>
        /// <returns>Lista de objetos DataContract.Response.EventoContabilResponse</returns>
        public List<Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Response.EventoContabilResponse> ConsultarEventosContabeis(Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.FiltroEventoContabilRequest request)
        {
            return new Translator.BusinessEntityToDataContract.EventoContabil().ToEventoContabilResponse(new BusinessLogic.EventoContabil().ConsultarEventosContabeis(new Translator.DataContractToBusinessEntity.EventoContabil().ToFiltroEventoContabil(request)));
        }

        /// <summary>
        /// Serviço irá excluir o EventoContabil informado como parâmetro.
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroEventoContabilChave</param>
        public void ExcluirEventoContabil(Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.FiltroEventoContabilChave request)
        {
            new BusinessLogic.EventoContabil().ExcluirEventoContabil(new Translator.DataContractToBusinessEntity.EventoContabil().ToFiltroEventoContabilChave(request));
        }

        /// <summary>
        /// Serviço irá excluir uma coleção de EventosContabeis informados como parâmetro.
        /// </summary>
        /// <param name="requestList">Lista de objetos DataContract.Request.FiltroEventoContabilChave</param>
        public void ExcluirEventosContabeis(List<Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.FiltroEventoContabilChave> requestList)
        {
            new BusinessLogic.EventoContabil().ExcluirEventosContabeis(new Translator.DataContractToBusinessEntity.EventoContabil().ToFiltroEventoContabilChave(requestList));
        }

        /// <summary>
        /// Serviço irá excluir/incluir/alterar os objetos EventoContabil informados como parâmetro.
        /// </summary>
        /// <param name="exclusaoList">Lista de objetos DataContract.Request.FiltroEventoContabilChave</param>
        /// <param name="inclusaoList">Lista de objetos DataContract.Request.EventoContabilRequest</param>
        /// <param name="alteracaoList">Lista de objetos DataContract.Request.EventoContabilRequest</param>
        public void ExecutarTransacoesEventoContabil(   List<DataContract.Request.FiltroEventoContabilChave> exclusaoList, 
                                                        List<DataContract.Request.EventoContabilRequest> inclusaoList, 
                                                        List<DataContract.Request.EventoContabilRequest> alteracaoList)
        {
            Translator.DataContractToBusinessEntity.EventoContabil translator = new Translator.DataContractToBusinessEntity.EventoContabil();
            new BusinessLogic.EventoContabil().ExecutarTransacoesEventoContabil(translator.ToFiltroEventoContabilChave(exclusaoList),
                                                                                translator.ToEventoContabil(inclusaoList),
                                                                                translator.ToEventoContabil(alteracaoList));
        }

        /// <summary>
        /// Serviço irá incluir o EventoContabil informado como parâmetro.
        /// </summary>
        /// <param name="request">DataContract.Request.EventoContabilRequest</param>
        public void IncluirEventoContabil(Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.EventoContabilRequest request)
        {
            new BusinessLogic.EventoContabil().IncluirEventoContabil(new Translator.DataContractToBusinessEntity.EventoContabil().ToEventoContabil(request));
        }

        /// <summary>
        /// Serviço irá incluir uma coleção de EventosContabeis informados como parâmetro.
        /// </summary>
        /// <param name="requestList">Lista de objetos DataContract.Request.EventoContabilRequest</param>
        public void IncluirEventosContabeis(List<Sinacor.Servico.Bovespa.Contabil.Service.DataContract.Request.EventoContabilRequest> requestList)
        {
            new BusinessLogic.EventoContabil().IncluirEventosContabeis(new Translator.DataContractToBusinessEntity.EventoContabil().ToEventoContabil(requestList));
        }

        /// <summary>
        /// Serviço irá Obter o EventoContabil informado como parâmetro.
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroEventoContabilChave</param>
        /// <returns>DataContract.Response.EventoContabilResponse</returns>
        public DataContract.Response.EventoContabilResponse ObterEventoContabil(DataContract.Request.FiltroEventoContabilChave request)
        {
            return new Translator.BusinessEntityToDataContract.EventoContabil().ToEventoContabilResponse(new BusinessLogic.EventoContabil().ObterEventoContabil(new Translator.DataContractToBusinessEntity.EventoContabil().ToFiltroEventoContabilChave(request)));
        }

        #endregion
    }
}
